<?php
/**
 * 系统设置模型
 * 
 * ============================================================================
 * 版权所有: (c) 2009-2011，<UEShop Inc>，并保留所有权利。
 * 网站地址: http://www.ueshop.cn
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用；
 * 不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 *
 * @author      cmpan
 * @copyright   Copyright (c) 2009-2011 UEShop Inc. (http://www.ueshop.cn)
 * @license     http://www.ueshop.cn/1_0.txt
 */
class OptionModel extends UE_Model {	
	public $table  = 'ue_option';
	public $key    = 'option_name';

	private static $_opts = array();
	
	/**
	 * 获取配置项
	 *
	 * @param string $optionName 选项名
	 * @return string  选项值
	 * @param bool $reload 是否重新载入系统配置信息
	 */
	public static function getOption($optionName, $reload = false) {
		if (!self::$_opts) {
			self::loadOpts();
		}
		
		if (!$reload && isset(self::$_opts[$optionName])) {
			return self::$_opts[$optionName];
		}
		
		$optionName = strtoupper($optionName);
		$sql = "SELECT option_value FROM ue_option WHERE option_name = '$optionName'";
		$optionValue = self::_db()->getfirstField($sql);;
		
		return self::$_opts[$optionName] = $optionValue;
	}

	/**
	 * 更新/写入选项值, 写入值将被addslashes
	 *
	 * @param string $optionName
	 * @package string $optionValue 将被addslashes
	 * @return bool
	 */
	public static function writeOptionValue($optionName, $optionValue) {
		if (empty($optionName)) {
			return false;
		}
		
		$option = self::_db()->getfirstField("SELECT option_input_type,option_value FROM ue_option WHERE option_name='$optionName'");
		if (!$option) {
			return false;
		}
		
		if ($option['option_input_type'] == 'checkbox') {
			$optionValue = serialize($optionValue);
		}
		
		if ($option['option_value'] == $optionValue) {
			return true;
		}
		
		$option = array('option_value' => addslashes($optionValue));
		
		$rs = self::_db()->update('ue_option', 'option_name', $optionName, $option);
		if ($rs === false) {
			$this->setErr(self::_db()->getLastErr());
			return false;
		} 
		
		@unlink(DATA_DIR.'/system/opts.php');
		self::loadOpts();
		
		return true;
	}
	
	public function update($arr) {
		if(! $this->check()) {
			return false;
		}
		
		if (empty($arr['option_title']) || empty($arr['option_name']) || empty($arr['option_input_type'])) {
			$this->setErr('属性名称、属性标识和属性类型必填');
			return false;
		}
		
		if ($arr['option_input_type'] == 'checkbox' || $arr['option_input_type'] == 'radio' || $arr['option_input_type'] == 'select') {
			if (empty($arr['option_values'])) {
				$this->setErr('请设置选项可选值');
			    return false;
			}
		}
		
		empty($arr['option_value']) || self::$_opts[$this->id] = $arr['option_value'];
		
		if (!parent::update($arr)) {
			return false;
		}
		
		@unlink(DATA_DIR.'/system/opts.php');
		self::loadOpts();
		return true;
	}
	
	/**
	 * 载入配置选项
	 *
	 * @return array
	 */
	public static function loadOpts() {
		$optsFile = DATA_DIR.'/system/opts.php';
		if(is_file($optsFile)) {
			return self::$_opts = include $optsFile;
		}
		
		$sql = "SELECT option_name, option_value FROM ue_option WHERE option_autoload='1'";
		$rows = self::_db()->getAll($sql);
		foreach ($rows as $row) {
			self::$_opts[$row['option_name']] = $row['option_value'];
		}
		
		writeData(DATA_DIR.'/system/opts.php', self::$_opts);
				
		return self::$_opts;
	}
	
	/**
	 * 获取类型
	 *
	 * @param int $typeGroup 分组
	 * @param bool $getDisabled 是否获取已禁用的
	 * @return array
	 */
	public static function getOptionTypes($typeGroup = 0, $getDisabled = true) {
		$sql = "SELECT * FROM ue_option_type WHERE true";
		if (!$getDisabled) {
			$sql .= " AND option_type_enabled=1" ;
		}
		
		if ($typeGroup) {
			$sql .= " AND option_type_group={$typeGroup}" ;
		}
		
		$sql .= " ORDER BY option_type_order";
		
		return self::_db()->getAll($sql);
	}
}
